<?php
/**
 * Classe model da tabela AGENDA
 * @filesource
 * @author			Diogo Corazolla
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.models
 * @version			1.0
*/
class AgendaSala extends Zend_Db_Table_Abstract
{
	protected $_name = "tbl_agenda";
	protected $_referenceMap = array(
		'StatusAgenda' => array(
			'columns' => 'statusagenda_id',
			'refTableClass' => 'StatusAgenda',
			'refColumns' => 'id'
		),
		'Sala' => array(
			'columns' => 'sala_id',
			'refTableClass' => 'Sala',
			'refColumns' => 'id'
		),
		'Cliente' => array(
			'columns' => 'cliente_id',
			'refTableClass' => 'Cliente',
			'refColumns' => 'id'
		),
		'TipoSala' => array(
			'columns' => 'tiposala_id',
			'refTableClass' => 'TipoSala',
			'refColumns' => 'id'
		)
	);
	
	/**
	 * Retorna registros do banco de dados
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @param array $order - array com orders no formado "coluna_1 desc","coluna_2"...
	 * @param int $tamanho - numero de registros que deve retornar
	 * @param int $inicio - offset
	 * @return Zend_Db_Table_Rowset_Abstract
	 */
	public function busca($where=array(), $order=array(), $tamanho=-1, $inicio=-1)
	{
		// criando objeto do tipo select
		$slct = $this->select();
		$slct->setIntegrityCheck(false);
		$slct->from(array("a"=>"tbl_agenda")); 
		$slct->joinInner(array("c"=>"tbl_contrato"), 
										"a.contrato_id = c.id", 
										array("contrato_id"=>"c.id"));
		$slct->joinInner(array("p"=>"tbl_pessoa"), 
										"c.pessoa_id = p.id", 
										array("cliente_nome"=>"p.vhr_nome"));
		// adicionando clausulas where
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}
		// adicionando linha order ao select
		$slct->order($order);		// paginacao 
		if ($tamanho > -1)
		{
			$tmpInicio = 0;
			if ($inicio > -1) 
			{				$tmpInicio = $inicio;
			}
			$slct->limit($tamanho, $tmpInicio);
		}//xd($slct->query());
		// retornando os registros conforme objeto select
		return $this->fetchAll($slct);
	}	public function buscaCompleta($where=array(), $order=array(), $tamanho=-1, $inicio=-1)	{		// criando objeto do tipo select		$slct = $this->select();		$slct->setIntegrityCheck(false);		$slct->from(array("a"=>"tbl_agenda")); 		$slct->joinInner(array("s"=>"tbl_sala"), 										"a.sala_id = s.id");		$slct->joinInner(array("t"=>"tbr_tiposala"), 										"s.tiposala_id = t.id", 										array("vhr_tiposala"=>"t.vhr_nome"));		$slct->joinInner(array("u"=>"tbr_unidade"), 										"s.unidade_id = u.id", 										array("vhr_unidade"=>"u.vhr_nome"));		$slct->joinInner(array("c"=>"tbl_contrato"), 										"a.contrato_id = c.id", 										array("contrato_id"=>"c.id"));		$slct->joinInner(array("p"=>"tbl_pessoa"), 										"c.pessoa_id = p.id", 										array("cliente_nome"=>"p.vhr_nome"));		// adicionando clausulas where		foreach ($where as $coluna=>$valor)		{			$slct->where($coluna." ?", $valor);		}		// adicionando linha order ao select		$slct->order($order);		// paginacao 		if ($tamanho > -1)		{			$tmpInicio = 0;			if ($inicio > -1) 			{				$tmpInicio = $inicio;			}			$slct->limit($tamanho, $tmpInicio);		}//xd($slct->query());		// retornando os registros conforme objeto select		return $this->fetchAll($slct);	}			/**	 * apaga um registro da tabela	 * @param int $codigo - codigo do registro para apagar	 * @return void	 */	public function apaga($codigo)	{//		$row = $this->find($codigo)->current();//		$row->bln_ativo = 0;//		$row->save();		$where = $this->getAdapter()->quoteInto('id = ?', $codigo);		$this->delete($where);	}		/**	 * apaga um registro da tabela	 * @param int $codigo - codigo do registro para apagar	 * @return void	 */	public function apagaAgendamentosFuturos($codContrato)	{//		$row = $this->find($codigo)->current();//		$row->bln_ativo = 0;//		$row->save();		$rsAgendas = $this->busca(array("a.contrato_id="=>$codContrato,										"a.dte_data >="=>date("Y-m-d")))->toArray();		foreach($rsAgendas as $agenda){			$this->apaga($agenda['id']);		}	}	
	/**
	 * retorna total de registros do banco
	 * @param array $where - array com dados where no formato "nome_coluna_1"=>"valor_1","nome_coluna_2"=>"valor_2"
	 * @return int
	 */
	public function pegaTotal($where=array())
	{
		$slct = $this->select();
		
		$slct->setIntegrityCheck(false);

		$slct->from(array("c"=>"tbr_cidade")); 
		$slct->joinInner(array("u"=>"tbr_uf"), 
										"c.uf_id = u.id", 
										array("uf_nome"=>"u.vhr_nome",
												"uf_id"=>"u.id"));
		
		$slct->from($this, array("COUNT(c.id) as total"));
		
		foreach ($where as $coluna=>$valor)
		{
			$slct->where($coluna." ?", $valor);
		}
		
		$rows = $this->fetchAll($slct);
		
		return $rows->current()->total;
	}
}
